import {getCart, addCart, upCart, delCart} from '../../assets/js/request.js'
import Cookie from 'js-cookie'
const state = {
    cartProducts: JSON.parse(localStorage.getItem('cart')) || []
}
const mutations = {
    // 将浏览器缓存里的购物车商品取出来放入vuex
    GetCart(state) {
        state.cartProducts = JSON.parse(localStorage.getItem('cart'))
    },

    // 更新vuex里商品数量
    UpCart(state, id) {
        const prod = state.cartProducts.find(item => item.goods_id === id)
        console.log(prod)
        prod.num++;
        prod.totalPrice = (prod.num * prod.s_good.price).toFixed(2)
    },

    // 清空vuex数据
    DelVuexCart(state) {
        state.cartProducts = [];
    },

    // 删除vuex里购物车的商品
    DelGoods(state, id) {
        state.cartProducts = state.cartProducts.filter(item => item.id !== id)
        console.log(state.cartProducts)
    },  

    // 改变商品的checked
    UpChecked(state, id) {
        state.cartProducts = state.cartProducts.map(item => {
            item.checked = item.id === id ? !item.checked : item.checked
            return item
        })
    }
}
const actions = {
    // 请求购物车的商品
    async getCartArr(context) {
        // console.log(context)
        let cartArr = await getCart()
        // 为了排除不是这个用户的购物车商品
        cartArr = cartArr.filter(ele => {
            return ele.user_id === (JSON.parse(Cookie.get('user')).id)
        }),
        cartArr = cartArr.map(ele => {
            // 系列
            ele.series = ele.s_good.desc.split("_")[0]
            // 小计
            ele.totalPrice = ele.num * ele.s_good.price
            // 是否选中,默认选中
            ele.checked = true
            return ele
        })
        // 将数据存在缓存
        // console.log(cartArr)
        localStorage.setItem('cart', JSON.stringify(cartArr))
        context.commit('GetCart')
        // console.log(this.cartProducts)
    },

    // 添加商品到购物车
    async AddCart({dispatch, commit, state}, id) {
        // console.log(state, id)
        // 判断传递进来的商品是不是已经存在
        console.log(state)
        const prod = state.cartProducts.find(item => item.goods_id === id)
        // 没有就返回undefined
        // 如果id相等，prod可以拿到item这个对象
        if(prod){
            // 更新后台购物车商品数量请求
            console.log(prod)
            commit('UpCart', prod.goods_id)
            console.log("更新")
            await upCart(prod)
            .then(() => {
                console.log("添加成功")
                return true
            })
            .catch(() => {
                console.log("添加失败")
                return false
            })
        }else {
            console.log("添加")
            // 添加商品到后台购物车
            await addCart({
                id: id,
                num: 1,
            })
            .then(() => {
                console.log("添加成功")
                return true
            })
            .catch(() => {
                console.log("添加失败")
                return false
            })
            // 请求购物车的数据
            dispatch('getCartArr')
        }
        // console.log(state.cartProducts)
    },

}
const getters = {
    cartshow(state) {
        if(state.cartProducts.length === 0) {
            return false
        } else {
            return true
        }
    },
    // 购物车里所有商品的总价
    allPrice(state) {
        let arr = state.cartProducts.filter(item => {
            if (item.checked) {
                return item
            }
        }) 
        return arr.reduce((total, item) => {
            return total += item.totalPrice
        }, 0)
    },
    
    // 购物车所有商品的总数
    allNum(state) {
        return state.cartProducts.reduce((total, item) => {
            return total += item.num
        }, 0)
    }
}

export default {
    namespaced: true,
    state,
    mutations,
    actions,
    getters
}